package com.shujia.common_.nine;

import org.junit.Test;

import java.util.Arrays;

public class RegexDemo1 {


    @Test
    public void test5() {
        // ^行的开头
        String str = "abc";
        // matches 会匹配所有的字符
        boolean flag = str.matches("^abc");
        System.out.println(flag);

        flag = str.matches("abc$");
        System.out.println(flag);
    }

    @Test
    public void test4() {
        //例如[abc]，表示a、b、c其中任意一个字符；[gz]表示g、z其中的任意一个字符
        String str = "a";
        boolean flag = str.matches("[abc]");
        System.out.println(flag);


        str = "g";
        flag = str.matches("[^a-f]");
        System.out.println(flag);

        str = "public1";
        flag = str.matches("(public|protected|private)");
        System.out.println(flag);
    }

    @Test
    public void test3() {
        String str = "ab";
        /*
        matches 有数量的概念, .虽然是任意字符串, 但是一个.只能表示一个字符
        matches 想要返回true, 除了字符串要匹配之外, 数量也要保持一致才可以
        */
        boolean flag = str.matches("..");

        str = "12";
        // \d表示的是一个数字
        flag = str.matches("\\d\\d");
        System.out.println(flag);

        str = "AB";
        // \d表示的是一个数字
        flag = str.matches("\\D\\D");
        System.out.println(flag);

        System.out.println("--------------");
        str = " ";
        // \d表示的是一个数字
        flag = str.matches("\\s");
        System.out.println(flag);

        str = "A";
        // \d表示的是一个数字
        flag = str.matches("\\S");
        System.out.println(flag);

        System.out.println("--------------");
        str = "a";
        // \d表示的是一个数字
        flag = str.matches("\\w");
        System.out.println(flag);

        str = "一";
        // \d表示的是一个数字
        flag = str.matches("\\W");
        System.out.println(flag);
    }

    @Test
    public void test2() {
        // 就是匹配正则本身
        String str = "($abc_debf_ghbi";
        // 匹配一些具有特殊含义的字符, 需要用"\\"转义
        String result = str.replaceFirst("\\$", "你");
        System.out.println(result);
    }

    /*
    boolean matches(String regex)：判断该字符串是否匹配指定正则表达式。
    String replaceAll(String regex, String replacement)：返回该字符串中所有匹配正则表达式的子串替换成replacement后的新字符串
    String replaceFirst(String regex, String replacement)：返回该字符串中第一个匹配正则表达式的子串替换成replacement后的新字符串
    String[] split(String regex)：根据给定正则表达式的拆分该字符串后得到的字符串数组。
     */
    @Test
    public void test1() {
        // 就是匹配正则本身
        String str = "abc_debf_ghbi";
        boolean flag = str.matches("abc");
        System.out.println(flag);

        String result = str.replaceAll("b", "你");
        System.out.println(result);

        str = "abc_debf_ghbi";
        result = str.replaceFirst("bc", "你");
        System.out.println(result);

        str = "abc_debf_ghbi";
        String[] arr = str.split("_");
        System.out.println(Arrays.toString(arr));


    }
}
